const CompressionPlugin = require("compression-webpack-plugin"); // 引入compression-webpack-plugin
const productionGzipExtensions = /\.(js|json|txt)(\?.*)?$/i; // 匹配此 {RegExp} 的资源
const webpack = require("webpack");

const externals = {
  vue: "Vue",
  "element-ui": "ELEMENT",
  axios: "axios",
  "vue-router": "VueRouter",
  vuex: "Vuex",
  echarts: "echarts",
  "vue-lazyload": "VueLazyload",
  // 'wangeditor': 'wangEditor',
  // 'hls': 'hls'
};

const cdn = {
  css: ["https://cdn.bootcss.com/element-ui/2.15.0/theme-chalk/index.min.css"],
  js: [
    "https://cdn.bootcss.com/vue/2.6.11/vue.min.js",
    // 'https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js',
    "https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js",
    "https://cdn.bootcss.com/vue-router/3.5.0/vue-router.min.js",
    "https://cdn.bootcss.com/vuex/3.6.0/vuex.min.js",
    "https://cdn.bootcss.com/element-ui/2.15.0/index.js",
    "https://cdn.jsdelivr.net/npm/echarts@5.0.1/dist/echarts.min.js",
    "https://cdn.bootcdn.net/ajax/libs/vue-lazyload/1.3.3/vue-lazyload.js",
    "https://cdn.jsdelivr.net/npm/wangeditor@4.6.5/dist/wangEditor.min.js",
    // 'https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.0.9-0.canary.7922/hls.js'
  ],
};

module.exports = {
  chainWebpack: (config) => {
    // CND配置 不将依赖包打包进vendors
    config.set("externals", externals);
    //只加载当前页面需要的js
    config.plugins.delete("prefetch");
    // 移除 preload 插件，避免加载多余的资源
    config.plugins.delete("preload");
    // 生产环境
    // config.when(process.env.NODE_ENV === "production", config => {
    config.plugin("html").tap((args) => {
      // config.entry('app').clear().add('./src./main.js') // 更换入口
      args[0].title = "数字化成长空间";
      // args[0].cdn = cdn
      return args;
    });
    // })
    // GIZP
    if (process.env.NODE_ENV === "production") {
      config.plugin("compressionPlugin").use(
        new CompressionPlugin({
          filename: "[path].gz[query]",
          algorithm: "gzip",
          test: productionGzipExtensions,
          threshold: 10240,
          minRatio: 0.8,
          deleteOriginalAssets: false, // 删除源文件
        })
      );
    }
  },
  //其他配置....
  configureWebpack: {
    devtool: "source-map",
    plugins: [
      // 'transform-remove-console',
      //maxChunks：使用大于或等于 1 的值，来限制 chunk 的最大数量。使用 1 防止添加任何其他额外的 chunk，这是因为entry/main chunk 也会包含在计数之中。
      //minChunkSize: 设置 chunk 的最小大小。
      //在合并 chunk 时，webpack 会尝试识别出具有重复模块的 chunk，并优先进行合并。任何模块都不会被合并到 entry   chunk 中，以免影响初始页面加载时间。
      new webpack.optimize.LimitChunkCountPlugin({
        maxChunks: 15,
        minChunkSize: 10000,
      }),
    ],
  },
  css: {
    extract:
      process.env.NODE_ENV === "production"
        ? {
            ignoreOrder: true,
          }
        : false,

    loaderOptions: {
      sass: {
        prependData: `@import "~@/assets/scss/index.scss"`,
      },
    },
  },
  publicPath: "/",
  assetsDir: "static",
  outputDir: "dist",
  pluginOptions: {
    "style-resources-loader": {
      preProcessor: "stylus",
      patterns: [],
    },
  },
  devServer: {
    proxy: {
      "/api": {
        // target: 'http://localhost:3000', // 服务器端接口地址 http://localhost:3000
        // target: 'http://test.codelover.club', // 服务器端接口地址 http://localhost:3000
         target: "http://10.1.6.130/", // 校内服务器端接口地址
        // target: 'http://demo.codelover.club', // 服务器端接口地址 http://localhost:3000

        ws: false, //如果要代理 websockets，配置这个参数
        changeOrigin: true, //是否跨域
        pathRewrite: {
          "^/api": "/api",
        },
      },
      "/d_api": {
        //  target: 'http://localhost:3002', // 服务器端接口地址
        //target: 'http://test.codelover.club', // 服务器端接口地址
        target: "http://10.1.6.130", // 校内服务器端接口地址
        // target: "http://demo.codelover.club", // 服务器端接口地址 http://localhost:3000
        ws: false, //如果要代理 websockets，配置这个参数
        changeOrigin: true, //是否跨域
        pathRewrite: {
          "^/d_api": "/d_api",
        },
      },
      "/v_api": {
        // target: 'http://112.74.99.240:3004', // 服务器端接口地址
        // target: 'http://112.74.99.240:3004', // 服务器端接口地址
        target: "http://10.1.6.130:3004", // 校内服务器端接口地址
        // target: "http://demo.codelover.club", // 服务器端接口地址 http://localhost:3000
        ws: false, //如果要代理 websockets，配置这个参数
        changeOrigin: true, //是否跨域
        pathRewrite: {
          "^/v_api": "/",
        },
      },
      "/q_api": {
          // target: 'http://localhost:3003', // 服务器端接口地址
       target: "http://10.1.6.130/", // 校内服务器端接口地址
        // target: "http://120.79.72.18", // 服务器端接口地址
        ws: false, //如果要代理 websockets，配置这个参数
        changeOrigin: true, //是否跨域
        pathRewrite: {
          "^/q_api": "/q_api",
        },
      },
      // 文件上传服务代理
      "/f_api": {
      //  target: 'http://localhost:3007',// 'http://test.codelover.club', // 服务器端接口地址
        //target: 'http://test.codelover.club', // 服务器端接口地址
          target: "http://10.1.6.130:3004", // 校内服务器端接口地址
        // target: "http://demo.codelover.club", // 服务器端接口地址 http://localhost:3000
        ws: false, //如果要代理 websockets，配置这个参数
        changeOrigin: true, //是否跨域
        pathRewrite: {
          "^/f_api": "/f_api",
        },
      },
    },
  },

  // 关闭源码暴露
  productionSourceMap: false,
};
